import time
import network
import urequests


class WIFI:
    """
    用于管理Wi-Fi连接的类。
    
    属性:
        ssid (str): Wi-Fi网络的SSID。
        password (str): Wi-Fi网络的密码。
        wlan (network.WLAN): WLAN接口实例。
        max_retries (int): 最大连接重试次数。
        retry_interval (int): 每次连接重试之间的间隔（秒）。
    """

    def __init__(self,
                 ssid=None,
                 password=None,
                 max_retries=10,
                 retry_interval=3):
        """
        初始化WIFI类的新实例。
        
        参数:
            ssid (str, 可选): Wi-Fi网络的SSID。默认为None。
            password (str, 可选): Wi-Fi网络的密码。默认为None。
            max_retries (int, 可选): 最大连接重试次数。默认为10。
            retry_interval (int, 可选): 每次连接重试之间的间隔（秒）。默认为3。
        """
        self.ssid = ssid
        self.password = password
        self.wlan = network.WLAN(network.STA_IF)
        self.max_retries = max_retries
        self.retry_interval = retry_interval

    def connect(self):
        """
        尝试使用提供的SSID和密码连接到Wi-Fi网络。
        
        返回:
            bool: 如果连接成功返回True，否则返回False。
        """
        if not self.ssid or not self.password:
            raise ValueError("必须提供或设置环境变量中的SSID和密码")

        print("开始连接Wi-Fi...")
        self.wlan.active(True)

        try:
            self.wlan.connect(self.ssid, self.password)
        except Exception as e:
            print(f"连接Wi-Fi失败: {e}")
            return False

        retries = 0
        while not self.wlan.isconnected() and retries < self.max_retries:
            print("等待连接中...")
            time.sleep(self.retry_interval)
            retries += 1

        if not self.wlan.isconnected():
            print("连接Wi-Fi失败")
            return False

        print("Wi-Fi连接成功")
        ip_address = self.wlan.ifconfig()[0]
        print(f"IP地址: {ip_address}")
        return True

    def isconnected(self):
        """
        检查设备是否当前已连接到Wi-Fi网络。
        
        返回:
            bool: 如果已连接返回True，否则返回False。
        """
        return self.wlan.isconnected()

    def disconnect(self):
        """
        断开设备与当前Wi-Fi网络的连接并停用WLAN接口。
        """
        if not self.wlan.active():
            print("Wi-Fi已经处于非活动状态")
            return

        if self.wlan.isconnected():
            self.wlan.disconnect()
            self.wlan.active(False)
            print("已断开Wi-Fi连接")
        else:
            print("Wi-Fi未连接")
            
    def test(self):
        # 测试网络连接
        try:
            response = urequests.get("http://example.com", timeout=10)
            if response.status_code == 200:
                print("网络连接测试通过。")
                return True
            else:
                print(f"网络连接测试失败, 状态码: {response.status_code}")
                return False
        except OSError as e:
            print(f"网络连接测试失败: {e}")
            return False